Дата выхода:
1.0.0 - 14.08.2022
1.1.0 - 20.08.2022
Описание плагина:
Плагин позволяет упростить построение сцен, а именно - автоматизировать выбор графики чара для эвента.
Использование плагина:
У плагина нет параметров.
В Комментарии эвента:
<visualHelper: N, D> где::: N - номер персонажа из перечня Персонажей, чьи настройки графики чара нужно использовать; D - одно из четырех направлений (up, down, left, right).
Команды (в эвенте, в команде "Скрипт"):
Отсутствуют.
Нюансы:
0. Плагин носит экспериментальный характер, проверена корректность работы при сохранении / загрузке / переходу по локациям / смене страниц эвента по локальным и простым переключателям.
1. Указываемый персонаж (Actor) должен быть в перечне Персонажей (наличие его в партии не обязательно)!
2. Если у эвента задана графика, но есть и комментарий для плагина - плагин игнорирует графику эвента и меняет на заданную.
3. На каждой странице эвента может присутствовать, или отсутствовать, свой комментарий для плагина.
4. В эвенте, на странице, может быть несколько комментариев (до или после необходимого), в том числе не связанные с данным плагином - это не мешает работе.
5. Если в эвенте, на странице, более одного комментария для данного плагина, то в работу берется первый из них.
6. Вопрос совместимости, смотри раздел "Совместимость" в самом конце.
Пример использования:
В эвенте создаем комментарий с текстом <visualHelper: 11, down> - используем чар персонажа 11, с поворотом его вниз.
Персонаж должен быть в перечне Персонажей, наличие в партии - не обязательно.
...в целом, логика схожа с логикой плагина DKR_DialogueHelper.
Как это выглядит:
Думаю, картинки излишни.
Код:
СпойлерВерсия 1.1.0:
Код:
var Imported = Imported || {};
Imported.DKR_VisualHelper = true;
var DKR = DKR || {};
DKR.VisualHelper = DKR.VisualHelper || {};
DKR.VisualHelper.version = 1.1;
//-----------------------------------------------------------------------------
/*:
* @plugindesc (v.1.1.0) Плагин позволяет упростить построение сцен, а именно - автоматизировать выбор графики чара для эвента.
*
* @target MZ
* @author DarchanKaen
*
* @help
* DKR VisualHelper
* ----------------------------------------------------------------------------
* ---Общая информация:
* Плагин позволяет упростить построение сцен,
* а именно - автоматизировать выбор графики чара для эвента.
* Указываемый персонаж (Actor) должен быть в перечне Персонажей
* (наличие его в партии не обязательно)!
* ---Параметры плагина:
* Отсутствуют.
* --В Комментарии эвента:
* <visualHelper: N, D>
* где:::
* N - номер персонажа из перечня Персонажей, чьи настройки графики чара
* нужно использовать;
* D - одно из четырех направление (up, down, left, right).
* пример:::
* <visualHelper: 11, down> - используем чар персонажа 11, с поворотом его вниз
* ---Команды(в эвенте команда "Скрипт"):
* Отсутствуют.
*/
(() => {
//--DATA: BEGIN
const COMMENT_COMMAND_NUMBER_A = 108;
const COMMENT_COMMAND_NUMBER_B = 408;
const VH_BEGIN_CODENAME = '<visualHelper:';
const VH_END_CODENAME = '>';
const VH_DELEMITER = ',';
//--DATA: END
//--LOGIC: BEGIN
const isUseVisualHelp = (eventPage) =>{
let useVisualHelp = -1;
let eventCurrentPageComments = getEventCommentsListOnPage(eventPage);
for(let n = 0; n < eventCurrentPageComments.length; n++){
let currentComment = eventCurrentPageComments[n];
if( true === currentComment.includes(VH_BEGIN_CODENAME) ){
useVisualHelp = n;
break;
}
}
return useVisualHelp;
}
const getVisualData = (eventPage, commentIndex) => {
let visualData = null;
let eventNote = getEventCommentsListOnPage(eventPage)[commentIndex];
let eventPreVisualData = preParseVisualData(eventNote);
let actorId = eventPreVisualData[0];
let direction = eventPreVisualData[1];
let visualActor = $gameActors._data[actorId];
if(undefined === visualActor){
visualActor = new Game_Actor(actorId);
}
visualData = [visualActor._characterName, direction, visualActor._characterIndex];
visualActor = null;
return visualData;
}
const preParseVisualData = (eventNote) => {
let parsedVisualData = null;
eventNote = eventNote.trim();
try{
let parseBeginIndex = eventNote.indexOf(VH_BEGIN_CODENAME);
if(-1 === parseBeginIndex){
console.log('_DKR_VisualHelper: parseBeginIndex_PARSE_ERROR!');
return null;
}
let firstParsedString = eventNote.slice(parseBeginIndex);
let parseEndIndex = firstParsedString.indexOf(VH_END_CODENAME);
if(-1 === parseEndIndex){
console.log('_DKR_VisualHelper: parseEndIndex_PARSE_ERROR!');
return null;
}
let secondParsedString = firstParsedString.slice(0, parseEndIndex);
let thirdParsedString = secondParsedString.split(VH_BEGIN_CODENAME);
let fourthParsedString = thirdParsedString[1].split(VH_DELEMITER);
let actorId = parseInt(fourthParsedString[0].trim());
let direction = getDirectionByWord(fourthParsedString[1].trim());
if(-1 === direction){
console.log('_DKR_VisualHelper: parseDirection_PARSE_ERROR!');
return null;
}
parsedVisualData = [actorId, direction];
}catch(error){
console.log('_DKR_VisualHelper: PARSE_ERROR!');
console.log(error);
}
return parsedVisualData;
}
const getDirectionByWord = (directionWord) => {
let direction = -1;
switch(directionWord){
case 'up':
direction = 8;
break;
case 'down':
direction = 2;
break;
case 'left':
direction = 4;
break;
case 'right':
direction = 6;
break;
}
return direction;
}
const getEventCommentsListOnPage = (eventPage) => {
let commentsList = [];
let eventsCommandsList = eventPage.list;
for(let m = 0; m < eventsCommandsList.length; m++){
let currentCommand = eventsCommandsList[m];
if(COMMENT_COMMAND_NUMBER_A === currentCommand.code || COMMENT_COMMAND_NUMBER_B === currentCommand.code){
let comment = currentCommand.parameters[0].trim();
if(comment.length > 0){
commentsList.push(comment);
}
}
}
return commentsList;
}
//--LOGIC: END
//--CHANGED CORE: BEGIN
Game_Event.prototype.setupPageSettings = function() {
const page = this.page();
const image = page.image;
//-DKR magic: begin
let visualHelpCommentId = isUseVisualHelp(page);
let visualData = null;
if( visualHelpCommentId > -1 ){
visualData = getVisualData(page, visualHelpCommentId);
if(null !== visualData){
image.tileId = 0;
image.pattern = 1;
image.characterName = visualData[0];
image.direction = visualData[1];
image.characterIndex = visualData[2];
}else{
console.log('_DKR_VisualHelper: VISUAL_DATA_ERROR!');
}
}
//-DKR magic: end
if (image.tileId > 0) {
this.setTileImage(image.tileId);
} else {
this.setImage(image.characterName, image.characterIndex);
}
if (this._originalDirection !== image.direction) {
this._originalDirection = image.direction;
this._prelockDirection = 0;
this.setDirectionFix(false);
this.setDirection(image.direction);
}
if (this._originalPattern !== image.pattern) {
this._originalPattern = image.pattern;
this.setPattern(image.pattern);
}
this.setMoveSpeed(page.moveSpeed);
this.setMoveFrequency(page.moveFrequency);
this.setPriorityType(page.priorityType);
this.setWalkAnime(page.walkAnime);
this.setStepAnime(page.stepAnime);
this.setDirectionFix(page.directionFix);
this.setThrough(page.through);
this.setMoveRoute(page.moveRoute);
this._moveType = page.moveType;
this._trigger = page.trigger;
if (this._trigger === 4) {
this._interpreter = new Game_Interpreter();
} else {
this._interpreter = null;
}
};
//--CHANGED CORE: END
})();
Условия поставки плагина:
Поставляется AS-IS.
Вся ответственность при использовании - на Пользователе! !
Совместимость:
Плагин меняет - точнее, "расширяет" - логику обновления страницы эвента.
Может быть не совместим с другими плагинами, влияющими на графику эвентов в частности или логику обновления страниц эвента в принципе.
Помните, что плагин носит экспериментальный характер.
СпойлерЛирическое отступление:
Еще немножко quality-of-life.
Я просто понял, что мне лень не только в диалогах прокликивать лица-имена-цвета, а еще и на картах расставлять большое количество эвентов
с разной графикой.
Почему бы им не грузиться автоматом (ну хотя-бы графике)?
Может кому-то поможет на "Конкурсе енотов".
Последний раз редактировалось Darchan Kaen; 20.08.2022 в 17:34.
Причина: Обновлении до версии 1.1.0
А можно для тупых и тех кто только из пещеры вылез разъяснить простыми словами чё этот плагин делает?
Ты расставляешь по карте эвенты-НПЦ с графикой чаров (люди-монстры-животные-машины-итд) и их много, а графики у тебя в папке тоже много. И они на нескольких картах повторяются. А может еще и их графика как-то от условий зависит, к тому же.
Выбирать графику каждого эвента тебе лень, копипастить их тебе лень, выбирать в Движении эвентов / Скриптовой команде графику для эвентов тебе тоже лень.
Все лень, короче.
И вот ты подключаешь плагин и в эвенте можно графику не задавать, достаточно один раз в перечень Персонажей добавить перса с нужной графикой чара, и потом в эвенте прописыать комментарий с ссылкой на персонажа их базы данных, плагин подгрузит его внешний вид автоматически.
...копипастить эвенты, однако, все равно придется (плагин только графоний автоматизирует).
А можно для тупых и тех кто только из пещеры вылез разъяснить простыми словами чё этот плагин делает?
Хотя я понял, что он делает, но я опять буду ругать, что нет скринов. Ну можно же придумать, хотя бы схемки. Да не только в понимании дело, с картинками будет выглядеть по привольнее. Можно тут было вставить к примеру картинку из редактора сообщений с комментарием примером.
Социальные закладки